package models

import (
	"gorm.io/datatypes"
	"time"
)

type Topic struct {
	ID               int64          `gorm:"primaryKey;autoIncrement" json:"id"`
	Title            string         `gorm:"size:255;not null" json:"title"`
	CoverImage       string         `gorm:"size:512;default:''" json:"coverImage"`
	CardCoverImage   string         `gorm:"size:512;default:''" json:"cardCoverImage"`
	BannerCoverImage string         `gorm:"size:512;default:''" json:"bannerCoverImage"`
	Introduction     string         `gorm:"type:text" json:"introduction"`
	WebURL           string         `gorm:"size:512" json:"webUrl"`
	CategoryID       int64          `json:"categoryId"`
	Tags             datatypes.JSON `gorm:"type:json" json:"tags"`
	ContentType      int8           `json:"contentType"`
	Location         int8           `json:"location"`
	SortOrder        int16          `gorm:"default:0" json:"sortOrder"`
	Status           int8           `gorm:"default:0" json:"status"`
	StartTime        time.Time      `json:"startTime"`
	EndTime          time.Time      `json:"endTime"`
	ResourceCount    uint           `gorm:"default:0" json:"resourceCount"`
	ViewCount        uint           `gorm:"default:0" json:"viewCount"`
	LikeCount        uint           `gorm:"default:0" json:"likeCount"`
	CollectCount     uint           `gorm:"default:0" json:"collectCount"`
	ReleaseDate      time.Time      `json:"releaseDate"`
	CreateBy         int64          `json:"createBy"`
	CreateTime       time.Time      `json:"createTime"`
	UpdateBy         int64          `json:"updateBy"`
	UpdateTime       time.Time      `json:"updateTime"`
	IsDeleted        int8           `gorm:"default:0" json:"isDeleted"`
}

func (Topic) TableName() string {
	return "topic"
}

//*********** 获取资源数据 ***********

// TopicPageParams 分页专题数据
type TopicPageParams struct {
	Location    string `form:"location"`    // 专题位置：1：首页热门 2：热门专题列表
	ContentType string `form:"contentType"` // 专题内容类型，不同的内容类型对应不同的显示页面： 1-webURL页面，2：音频，3：长视频，4：复合类型',
	CategoryId  string `form:"categoryId"`  // 专题分类id 多个使用逗号分割
	IsSubCate   bool   `form:"isSubCate"`   // 是否获取专题分类以及子分类的专题
	UserID      string `form:"userId"`      // 用户ID

}

type TopicRes struct {
	ID               int64          `gorm:"primaryKey;autoIncrement" json:"id"`
	Title            string         `gorm:"size:255;not null" json:"title"`
	CoverImage       string         `gorm:"size:512;default:''" json:"coverImage"`
	CardCoverImage   string         `gorm:"size:512;default:''" json:"cardCoverImage"`
	BannerCoverImage string         `gorm:"size:512;default:''" json:"bannerCoverImage"`
	Introduction     string         `gorm:"type:text" json:"introduction"`
	WebURL           string         `gorm:"size:512" json:"webUrl"`
	CategoryID       int64          `json:"categoryId"`
	CategoryName     string         `json:"categoryName"`
	Tags             datatypes.JSON `gorm:"type:json" json:"tags"`
	ContentType      int8           `json:"contentType"`
	Location         int8           `json:"location"`
	SortOrder        int16          `gorm:"default:0" json:"sortOrder"`
	Status           int8           `gorm:"default:0" json:"status"`
	StartTime        time.Time      `json:"startTime"`
	EndTime          time.Time      `json:"endTime"`
	ResourceCount    uint           `gorm:"default:0" json:"resourceCount"`
	ViewCount        uint           `gorm:"default:0" json:"viewCount"`
	LikeCount        uint           `gorm:"default:0" json:"likeCount"`
	CollectCount     uint           `gorm:"default:0" json:"collectCount"`
	ReleaseDate      time.Time      `json:"releaseDate"`
	CreateBy         int64          `json:"createBy"`
	CreateTime       time.Time      `json:"createTime"`
	UpdateBy         int64          `json:"updateBy"`
	UpdateTime       time.Time      `json:"updateTime"`
	IsDeleted        int8           `gorm:"default:0" json:"isDeleted"`

	// 新增用户属性字段
	IsLike    bool `json:"isLike" gorm:"-"`
	IsCollect bool `json:"isCollect" gorm:"-"`
}

// TopicResList 专辑列表返回数据结构体
type TopicResList struct {
	List        []TopicRes `json:"list"`
	Total       int64      `json:"total"`
	PageNum     int        `json:"pageNum"`
	PageSize    int        `json:"pageSize"`
	HasNextPage bool       `json:"hasNextPage"`
}

type TopicResource struct {
	ID         int64 `gorm:"primaryKey"`
	TopicID    int64 `gorm:"index"`
	ResourceID int64 `gorm:"index"`
	CreateBy   int64
	CreateTime time.Time
}
